home *** CD-ROM | disk | FTP | other *** search
/ Mac Easy 2010 May / Mac Life Ubuntu.iso / casper / filesystem.squashfs / usr / lib / python2.6 / dist-packages / AppInstall / BrowserView.pyc (.txt) < prev    next >
Encoding:
Python Compiled Bytecode  |  2009-10-12  |  5.2 KB  |  134 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyc (Python 2.6)
  3.  
  4. import gtk
  5. import gtkhtml2
  6. import urllib
  7. import urlparse
  8. import gobject
  9. import time
  10. import subprocess
  11. from gettext import gettext as _
  12.  
  13. class BrowserView(object):
  14.     ''' abstract browser interface for AppInstall, the requirements are
  15.         very light, it must only support loading a html page for now
  16.      '''
  17.     
  18.     def loadUri(self, uri):
  19.         pass
  20.  
  21.  
  22.  
  23. class DumpBrowserView(gtk.ScrolledWindow):
  24.     
  25.     def __init__(self):
  26.         gtk.ScrolledWindow.__init__(self)
  27.         self.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
  28.         self.set_shadow_type(gtk.SHADOW_IN)
  29.         self.view = gtk.TextView()
  30.         self.add(self.view)
  31.         self.view.show_all()
  32.  
  33.     
  34.     def loadUri(self, uri):
  35.         parts = urlparse.urlparse(uri)
  36.         if parts[0] != 'file':
  37.             return False
  38.         f = open(parts[2])
  39.         buf = self.view.get_buffer()
  40.         buf.set_text(f.read())
  41.         return True
  42.  
  43.  
  44.  
  45. class GtkHtml2BrowserView(gtk.ScrolledWindow):
  46.     __gsignals__ = {
  47.         'submit': (gobject.SIGNAL_RUN_LAST, gobject.TYPE_NONE, (gobject.TYPE_STRING, gobject.TYPE_STRING, gobject.TYPE_STRING)) }
  48.     
  49.     def __init__(self):
  50.         gtk.ScrolledWindow.__init__(self)
  51.         self.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
  52.         self.set_shadow_type(gtk.SHADOW_IN)
  53.         self.view = gtkhtml2.View()
  54.         self.view.show()
  55.         self.currentUri = None
  56.         self._opener = urllib.FancyURLopener()
  57.         self.document = gtkhtml2.Document()
  58.         self.document.connect('request_url', self._request_url)
  59.         self.view.set_document(self.document)
  60.         self.add(self.view)
  61.         self.document.connect('link_clicked', self.linkClicked)
  62.         self.document.connect('submit', self.submit)
  63.  
  64.     
  65.     def linkClicked(self, document, link):
  66.         subprocess.Popen([
  67.             '/usr/bin/gnome-open',
  68.             link])
  69.  
  70.     
  71.     def submit(self, document, action, method, value):
  72.         '''A html form in the app description is used to add required
  73.            repositories. So send the corresponding signal'''
  74.         self.emit('submit', action, method, value)
  75.  
  76.     
  77.     def loadUri(self, uri):
  78.         self.content = None
  79.         if uri == 'about:blank':
  80.             self.document.clear()
  81.             return None
  82.         
  83.         try:
  84.             f = self._open_uri(uri)
  85.         except (OSError, IOError):
  86.             uri == 'about:blank'
  87.             uri == 'about:blank'
  88.             print 'failed to open', uri
  89.             self.content = _("Failed to open '%s'") % uri
  90.             lock.release()
  91.             return None
  92.  
  93.         self.currentUri = self._resolve_uri(uri)
  94.         self.headers = f.info()
  95.         self.content = f.read()
  96.         self.document.open_stream('text/html')
  97.         self.document.write_stream(self.content)
  98.         self.document.close_stream()
  99.  
  100.     
  101.     def _open_uri(self, uri):
  102.         uri = self._resolve_uri(uri)
  103.         return self._opener.open(uri)
  104.  
  105.     
  106.     def _resolve_uri(self, uri):
  107.         if self._is_relative_to_server(uri):
  108.             return urlparse.urljoin(self.currentUri, uri)
  109.         return uri
  110.  
  111.     
  112.     def _request_url(self, document, url, stream):
  113.         f = self._open_uri(url)
  114.         stream.write(f.read())
  115.  
  116.     
  117.     def _is_relative_to_server(self, url):
  118.         parts = urlparse.urlparse(url)
  119.         if parts[0] or parts[1]:
  120.             return False
  121.         return True
  122.  
  123.  
  124. gobject.type_register(GtkHtml2BrowserView)
  125. if __name__ == '__main__':
  126.     win = gtk.Window()
  127.     view = GtkHtml2BrowserView()
  128.     view.set_size_request(600, 400)
  129.     win.add(view)
  130.     win.show_all()
  131.     view.loadUri('http://www.skype.com/company/legal/eula/')
  132.     gtk.main()
  133.  
  134.